package cn.stylefeng.guns.modular.business.comment;

import org.springframework.stereotype.Component;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Random;

@Component
public class YunHeUtil {

//    private static SubUseBrowseController subUseBrowseService;


    /**
     * 根据图片链接转为base64数据
     *
     * @param imageUrl
     * @return
     * @throws Exception
     */
    public static String getBase64ByUrl(String imageUrl) throws Exception {
        // new一个URL对象
        URL url = new URL(imageUrl);
        // 打开链接
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // 设置请求方式为"GET"
        conn.setRequestMethod("GET");
        // 超时响应时间为5秒
        conn.setConnectTimeout(5 * 1000);
        // 通过输入流获取图片数据
        InputStream inStream = conn.getInputStream();
        // 得到图片的二进制数据，以二进制封装得到数据，具有通用性
        byte[] data = readInputStream(inStream);
        Base64.Encoder encoder = Base64.getEncoder();
        String s = encoder.encodeToString(data);
        return s;
    }

    private static byte[] readInputStream(InputStream inStream) throws Exception {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        // 创建一个Buffer字符串
        byte[] buffer = new byte[1024];
        // 每次读取的字符串长度，如果为-1，代表全部读取完毕
        int len = 0;
        // 使用一个输入流从buffer里把数据读取出来
        while ((len = inStream.read(buffer)) != -1) {
            // 用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度
            outStream.write(buffer, 0, len);
        }
        // 关闭输入流
        inStream.close();
        // 把outStream里的数据写入内存
        return outStream.toByteArray();
    }

    //count是要取的随机数的个数，arround是随机数在哪个范围取 [0~arround）
    public static int[] rundomNum(int count, int arround){
        long time = System.currentTimeMillis();//依旧是测试时间。。。
        Random random = new Random();
        ArrayList<Integer> numList = new ArrayList<>();//集合存放可以取的数值范围
        int[] rand = new int[count];//随机数组
        for (int i = 1; i < arround+1; i++) {
            numList.add(i);//循环把范围内的数值顺序放入结集合
        }
        for (int i = 0; i < count; i++) {
            int n = random.nextInt(arround - i); // 随机范围内的数作为集合的下标
            rand[i] = numList.get(n); //找到这下标的数值并赋值给随机数组
            numList.remove(n);//把该值从数组移除
        }
        long time2 = System.currentTimeMillis();

        //System.out.println("testA运行时间： " + (time2 - time) + "ms");
        return rand;
    }

//    @NotNull
//    public static boolean saveBrowse(String type, String title, Long name) {
//        if(type.isEmpty()){
//           type="";
//        }
//        if(title.isEmpty()){
//            title="";
//        }
//        if(name.equals("")){
//            name=-1l;
//        }
//        SubUseBrowseRequest subUseBrowseRequest = new SubUseBrowseRequest();
//
//        subUseBrowseRequest.setBrowseTime(DateUtil.now());
//        subUseBrowseRequest.setBrowseType(type);
//        subUseBrowseRequest.setBrowseTitle(title);
//        subUseBrowseRequest.setUserName(name);
//        if(subUseBrowseRequest == null){
//            return false;
//        }
//        try{
//        subUseBrowseService.add(subUseBrowseRequest);
//        }catch (NullPointerException nullPointerException){
//            return false;
//        }
//        return true;
//
//
//    }
}
